package com.hy;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:2606. 找到最大开销的子字符串
 * 求最大子数组和一个道理
 * <p>
 * User:Mr.Du
 * Date:2024/5/21
 * Time:9:20
 */
public class MaximumCostSubstring {

    /**
     * 计算字符串中具有最大成本的子串的成本值。
     * @param s 要分析的字符串。
     * @param chars 包含s中可能出现字符的字符串，用于索引对应的成本值。
     * @param vals 与chars中每个字符对应的成本值数组。
     * @return 返回s中具有最大成本的连续子串的成本值。
     */
    public int maximumCostSubstring(String s, String chars, int[] vals) {
        int res = 0; // 存储最大成本值
        int sum = 0; // 当前子串的成本和
        for (int i = 0;i < s.length();i++) { // 遍历字符串s的每个字符
            char c = s.charAt(i);
            int num = -1;
            int t = chars.indexOf(c); // 尝试在chars中找到字符c的索引
            if(t != -1){
                num = vals[t]; // 如果找到，获取对应的成本值
            } else{
                num = c - 'a' + 1; // 如果c不在chars中，将字符转换为成本值（a为1，b为2，以此类推）
            }
            // 根据当前成本值更新sum，如果之前的sum大于0，则累加；否则重置为当前值。
            if (sum > 0) {
                sum += num;
            } else {
                sum = num;
            }
            // 更新最大成本值
            res = Math.max(res, sum);
        }
        return res; // 返回最大成本值
    }
}
